話說,資料轉完後,偶而會有需要把資料匯出,
當然你可以用TOAD, SQL Developer,其他開發工具來做匯出動作,
那遇到沒有上面工具的,手邊只有SQL PLUS的怎麼辦?
話說我真是沒錢買開發工具,沒膽用盜版軟體!
今天就來說說SQL PLUS這個工具有多.....簡單的用法!
就以這個Table為例
SQL> select * from dept;
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
這裡用4筆資料,是不多但也不少,用來示範剛剛好。
目的在產生 insert into dept (deptno, ….) values (10, ……);共4筆
首先,感謝Oracle,他把表格欄位都記錄下來了,其中一個表格就是All_tab_columns。
1 select substrb(table_name, 1, 30) tab_name,
2 substrb(column_name, 1, 30) col_name,
3 data_type
4 from all_tab_columns
5* where table_name = 'DEPT'
SQL> /
TAB_NAME COL_NAME DATA_TYPE
------------------------------ ------------------------------ ------------------------------
DEPT DEPTNO NUMBER
DEPT DNAME CHAR
DEPT LOC CHAR
上面col_name就是我們要產生的關鍵資料來源,很重要!
開始吧!以上欄位的轉折功能可以用前面網友分享的pivot(樞紐) 做到,不過時間不夠用,等下次整理看看。
這次就做到這裡。
1 select 'insert into DEPT( '|| 'DEPTNO, DNAME, LOC ) values ('||
2 deptno ||','||
3 chr(39)||trim(dname)||chr(39)||','||
4 chr(39)||trim(loc) ||chr(39)||');' "insert into DEPT"
5* from DEPT dd
SQL> /
insert into DEPT
----------------------------------------------------------------------------------------------------
insert into DEPT( DEPTNO, DNAME, LOC ) values (10,'ACCOUNTING','NEW YORK');
insert into DEPT( DEPTNO, DNAME, LOC ) values (20,'RESEARCH','DALLAS');
insert into DEPT( DEPTNO, DNAME, LOC ) values (30,'SALES','CHICAGO');
insert into DEPT( DEPTNO, DNAME, LOC ) values (40,'OPERATIONS','BOSTON');
接著透過spool 檔案、set head off 等指令就可以產生insert 的批次擋了。
也可以在union 出 'commit;’在最後一列。
[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1
[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1